﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace mrp16062010
{
    static class Eklentiler
    {
        public static DateTime ChangeTime(this DateTime dateTime, int hours, int minutes, int seconds, int milliseconds)
        {
            return new DateTime(
                dateTime.Year,
                dateTime.Month,
                dateTime.Day,
                hours,
                minutes,
                seconds,
                milliseconds,
                dateTime.Kind);
        }

        public static int Aralik(this Uretec.AralikSaat gelenAralik)
        {
            DateTime buyuk = new DateTime(2010, 1, 1, gelenAralik.Max.Saat, gelenAralik.Max.Dakika, 0);
            DateTime kucuk = new DateTime(2010, 1, 1, gelenAralik.Min.Saat, gelenAralik.Min.Dakika, 0);
            TimeSpan aralikTimeSpan = buyuk - kucuk;
            return int.Parse(aralikTimeSpan.TotalMinutes.ToString());
        }

        public static DateTime? Sql(this DateTime dateTime)
        {
            if (dateTime == DateTime.MinValue)
            {
                return null;
            }
            return dateTime;
        }

        public static bool TatilMi(this DateTime dateTime)
        {
            if (dateTime.DayOfWeek == DayOfWeek.Saturday || dateTime.DayOfWeek == DayOfWeek.Sunday)
            {
                return true;
            }
            
            DateTime bas = dateTime.ChangeTime(Ayarlar.Nesne.CalismaSaatleri.Min.Saat, Ayarlar.Nesne.CalismaSaatleri.Min.Dakika, 0, 0);
            DateTime bit = dateTime.ChangeTime(Ayarlar.Nesne.CalismaSaatleri.Max.Saat, Ayarlar.Nesne.CalismaSaatleri.Max.Dakika, 0, 0);
            
            if (
                DateTime.Compare(dateTime, bas) < 0//sabahtan önce
                ||
                DateTime.Compare(dateTime, bit) > 0//aksamdan sonra
                )
            {
                return true;
            }

            return false;
        }

        public static DateTime MesaiBitis(this DateTime tarih)
        {
            return tarih.ChangeTime(Ayarlar.Nesne.CalismaSaatleri.Max.Saat, Ayarlar.Nesne.CalismaSaatleri.Max.Dakika, 0, 0);
        }

        public static DateTime MesaiBaslangic(this DateTime tarih)
        {
            return tarih.ChangeTime(Ayarlar.Nesne.CalismaSaatleri.Min.Saat, Ayarlar.Nesne.CalismaSaatleri.Min.Dakika, 0, 0);
        }


        public static DateTime Yerlestirme(this DateTime tarih, TimeSpan kalan)
        {

            if (tarih + kalan > tarih.MesaiBitis() && tarih.TatilMi() == false)
            {
                //Mesai dışına taşıyor
                TimeSpan islenmesiGereken = kalan - (tarih.MesaiBitis() - tarih);

                return Yerlestirme(tarih.AddDays(1).MesaiBaslangic(), islenmesiGereken);
            }
            else if (tarih + kalan <= tarih.MesaiBitis() && tarih.TatilMi() == false)
            {
                //Mesai içinde bitiyor
                return tarih + kalan;
            }
            else
            {
                return Yerlestirme(tarih.AddDays(2).MesaiBaslangic(), kalan);
            }
        }

        //public static TimeSpan TatilSuresi(this DateTime bas, TimeSpan uzunluk)
        //{
        //    if (true)
        //    {
                
        //    }
        //}
    }
}
